--[[
Para los metiches: ésta el la lifemeter :D (barra de vida)
Como ves muchas cosas se pueden hacer con lua n_n
no me llevo todo el crédito por hacer ésto... le eché un
ojito a partes de code del theme dubaiOne y tambien
a la lifemeter que hice en el SMcon porque no me acordaba
cómo le hice :P Me fue mejor porque ahora se ve más ordenadito n_ñU

Hecho: Efectos de beat al extremo del relleno

Reemplazados algunos comandos por un update :D
]]

local function lifemeter(pn)
	local sType = GAMESTATE:GetCurrentStyle():GetStyleType()
	local xPosition = sType == 'StyleType_OnePlayerTwoSides' and 0 or SCREEN_CENTER_X/2
	local width = sType == 'StyleType_OnePlayerTwoSides' and 485 or 232
	
	local function Beat(self)
		local this = self:GetChildren();
		local lifemeter = SCREENMAN:GetTopScreen():GetLifeMeter(pn)
		local life = lifemeter:GetLife()
		
		local beat = GAMESTATE:GetSongBeat()
		local beatpart = beat%1
		local xoom = sType == 'StyleType_OnePlayerTwoSides' and 40 or 20
		xoom = xoom*beatpart
		
		--Máscara
		--empieza a animar cuando empieza el notefield
		if beat >= 0 then
			--sólo anima en medio beat
			if beatpart <= 0.5 then
				if life == 1 then
					xoom = 0
				end
				--Sí! eso! :D
				this.BeatMask:zoomx(xoom);
			end
		end
		
		this.BeatMask:x(-(life*width)+width/2);
		this.Fill:cropleft(1-life);
	end
	
	--Necesitas un ActorFrame para poner todo dentro
	return Def.ActorFrame {
		Name="Lifemeter";
		InitCommand=function(self)
			self:rotationy(sType == 'StyleType_OnePlayerTwoSides' and 0 or (pn == PLAYER_2 and 180 or 0));
			self:x(pn == PLAYER_1 and -xPosition or xPosition);
			self:SetUpdateFunction(Beat);
		end;
		
		--Background brillando en rojo cuando te queda poca vida (0.2%)
		Def.Quad {
			Name="DangerGlow";
			InitCommand=cmd(zoomto,width,12;player,pn;diffusealpha,0);
			--[[HealthStateChangedMessageCommand=function(self,param)
				if param.PlayerNumber == pn then
					if param.HealthState == 'HealthState_Danger' or param.HealthState == 'HealthState_Dead' then
						(cmd(diffusealpha,1;diffuseblink;effectperiod,0.1;effectcolor1,1,0,0,1;effectcolor2,1,0,0,0))(self);
					else
						(cmd(diffusealpha,0;stopeffect))(self);
					end
				end
			end;]]
			LifeChangedMessageCommand=function(self,param)
				if param.Player == pn then
					if param.LifeMeter:GetLife() <= 0.2 then
						(cmd(diffusealpha,1;diffuseblink;effectperiod,0.1;effectcolor1,1,0,0,1;effectcolor2,1,0,0,0))(self);
					else
						(cmd(diffusealpha,0;stopeffect))(self);
					end
				end
			end;
		};
		
		--Máscara que hace el efecto de "beat"
		Def.Quad {
			Name="BeatMask";
			InitCommand=cmd(horizalign,left;zoomy,12;player,pn;blend,'BlendMode_NoEffect';zwrite,true;clearzbuffer,true;playcommand,"Start");
		};
		
		--El relleno de la lifemeter...
		LoadActor("LIFEFILL")..{
			Name="Fill";
			InitCommand=cmd(x,width/2;horizalign,right;zoomto,width,12;player,pn;ztest,true);
			--Brillo cuando la vida está en 100%
			HealthStateChangedMessageCommand=function(self,param)
				if param.PlayerNumber == pn then
					if param.HealthState == 'HealthState_Hot' then
						(cmd(glowshift;effectperiod,0.1;effectcolor1,1,1,1,1;effectcolor2,1,1,1,0))(self);
					else
						(cmd(stopeffect))(self);
					end
				end
			end;
		};
		
		--Acá carga los gráficos para el marco según si juegas single o double
		LoadActor(sType == "StyleType_OnePlayerTwoSides" and "LIFE_DB" or "LIFE_SG")..{
			Name="Frame";
			InitCommand=cmd(player,pn);
		};
		
		--Un bonus que muestra la vida en porcentaje n_n
		--como el que hice en el SMcon... pero más lindoo :D
		Def.RollingNumbers {
			Name="LifePercentDisplay";
			Format="%05.2f%%";
			ApproachSeconds=0.2;
			File=THEME:GetPathF("","ArialOutline");
			InitCommand=function(self)
				--bonus!
				if not getenv("LifePercent") then
					self:visible(false);
					return
				end
				self:visible(true);
				(cmd(player,pn;x,90;y,-10;shadowlength,0;zoom,0.8))(self);
				self:rotationy(sType == "StyleType_OnePlayerTwoSides" and 0 or (pn == PLAYER_2 and 180 or 0));
			end;
			LifeChangedMessageCommand=function(self,param)
				if param.Player == pn then
					local life = param.LifeMeter:GetLife();
					self:targetnumber(life*100);
				end
			end;
		};
		--otro bonus para ver lo que llevas conpletado de la rola...
		--(percent like itg)
		Def.RollingNumbers {
			Name="ResultPercentDisplay";
			Format="%.2f%%";
			ApproachSeconds=0.2;
			File=THEME:GetPathF("","ArialOutline");
			InitCommand=function(self)
				--bonus!
				if not getenv("PercentProgress") then
					self:visible(false);
					return
				end
				self:visible(true);
				--easter egg: se colorea diferente cada día
				self:diffuse(Daycolors[Weekday()+1]);
				(cmd(player,pn;x,-90;y,-10;shadowlength,0;zoom,0.8))(self);
				self:rotationy(sType == "StyleType_OnePlayerTwoSides" and 0 or (pn == PLAYER_2 and 180 or 0));
			end;
			LifeChangedMessageCommand=function(self,param)
				if param.Player == pn then
					local PcntDp = STATSMAN:GetCurStageStats():GetPlayerStageStats(pn):GetPercentDancePoints();
					self:targetnumber(PcntDp*100);
				end
			end;
		};
	}
end

return Def.ActorFrame {
	lifemeter(PLAYER_1);
	lifemeter(PLAYER_2);
}

--[[
code Daisuke Master (c)

Términos de uso:
1.- Eres libre de usar todo o parte de éste código, sólamente dame crédito o incluye este bracket de comments en el luafile
2.- No permito que se use para fines comerciales
3.- Si quieres usar el código para fin comercial
	a). Contáctame por X o Y medio pero que sea directo de preferencia
		(messenger, phone si se puede (aver donde lo consigues xD))
	b). Móchate una feriecita xD no seas gacho
]]